NFS Server and CLient on Ubuntu and CentOS
'NFS Server and Client of Ubuntu and CentOS' This guide explains how to set up an NFS server and an NFS client on Debian and CentOS. NFS '''stands for '''Network File System; through NFS, a client can access (read, write) a remote share on an NFS server as if it was on the local hard disk. '( DEBIAN INSTALLATION AND CONFIGURATION )' 1 Preliminary Note I'm using two Debian systems here: *NFS Server: server.example.com, IP address: 192.168.0.100 *NFS Client: client.example.com, IP address: 192.168.0.101 2 Installing NFS server: On the NFS server we run: apt-get install nfs-kernel-server nfs-common portmap client: On the client we can install NFS as follows: apt-get install nfs-common portmap 3 Exporting Directories On The Server server: I'd like to make the directories /home and /var/nfs accessible to the client; therefore we must "export" them on the server. When a client accesses an NFS share, this normally happens as the user nobody. Usually the /home directory isn't owned by nobody (and I don't recommend to change its ownership to nobody!), and because we want to read and'write' on /home, we tell NFS that accesses should be made as root (if our /home share was read-only, this wouldn't be necessary). The /var/nfs directory doesn't exist, so we can create it and change its ownership to nobody andnogroup: mkdir /var/nfs chown nobody:nogroup /var/nfs Now we must modify /etc/exports where we "export" our NFS shares. We specify /home and /var/nfs as NFS shares and tell NFS to make accesses to /home as root (to learn more about /etc/exports, its format and available options, take a look at man 5 exports vi /etc/exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync) hostname2(ro,sync) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt) # /srv/nfs4/homes gss/krb5i(rw,sync) # /home 192.168.0.101(rw,sync,no_root_squash) /var/nfs 192.168.0.101(rw,sync) Whenever we modify /etc/exports, we must run(The no_root_squash option makes that /home will be accessed as root.) exportfs -a afterwards to make the changes effective. 4 Mounting The NFS Shares On The Client client: First we create the directories where we want to mount the NFS shares, e.g.: mkdir -p /mnt/nfs/home mkdir -p /mnt/nfs/var/nfs Afterwards, we can mount them as follows: mount 192.168.0.100:/home /mnt/nfs/home mount 192.168.0.100:/var/nfs /mnt/nfs/var/nfs '(CENTOS INSTALLATION AND CONFIGURATION)' 1 Preliminary Note I'm using two CentOS systems here: *NFS Server: server.example.com, IP address: 192.168.0.100 *NFS Client: client.example.com, IP address: 192.168.0.101 2 Installing NFS server: On the NFS server we run: yum install nfs-utils nfs-utils-lib Then we create the system startup links for the NFS server and start it: chkconfig --levels 235 nfs on /etc/init.d/nfs start client: On the client we can install NFS as follows (this is actually the same as on the server): yum install nfs-utils nfs-utils-lib 3 Exporting Directories On The Server server: I'd like to make the directories /home and /var/nfs accessible to the client; therefore we must "export" them on the server. When a client accesses an NFS share, this normally happens as the user nobody. Usually the /home directory isn't owned by nobody (and I don't recommend to change its ownership to nobody!), and because we want to read and'write' on /home, we tell NFS that accesses should be made as root (if our /home share was read-only, this wouldn't be necessary). The /var/nfs directory doesn't exist, so we can create it and change its ownership; in my tests the user and group nobody both had the ID 99 on both my CentOS test systems (server and client); when I tried to write to /var/nfs from the NFS client, I got a Permission denied error, so I did a chmod 777 /var/nfs so that everyone could write to that directory; writing to /var/nfs from the client worked then, and on the client the files written to /var/nfs appeared to be owned by the user and group nobody, but on the server they were owned by the (nonexistant) user and group with the ID 65534; so I changed ownership of /var/nfs to the user/group 65534 on the server and changed permissions of /var/nfs back to 755, and voilà, the client was allowed to write to /var/nfs: mkdir /var/nfs chown 65534:65534 /var/nfs chmod 755 /var/nfs Now we must modify /etc/exports where we "export" our NFS shares. We specify /home and /var/nfs as NFS shares and tell NFS to make accesses to /home as root (to learn more about /etc/exports, its format and available options, take a look at man 5 exports ) vi /etc/exports (The no_root_squash option makes that /home will be accessed as root.) Whenever we modify /etc/exports, we must run exportfs -a afterwards to make the changes effective. First we create the directories where we want to mount the NFS shares, e.g.: mkdir -p /mnt/nfs/home mkdir -p /mnt/nfs/var/nfs Afterwards, we can mount them as follows: mount 192.168.0.100:/home /mnt/nfs/home mount 192.168.0.100:/var/nfs /mnt/nfs/var/nfs You should now see the two NFS shares in the outputs of df -h ~# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 28G 2.2G 25G 8% / /dev/sda1 99M 13M 82M 14% /boot tmpfs 250M 0 250M 0% /dev/shm 192.168.0.100:/home 28G 2.6G 25G 10% /mnt/nfs/home 192.168.0.100:/var/nfs 28G 2.6G 25G 10% /mnt/nfs/var/nfs ~# and mount ~# mount /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/sda1 on /boot type ext3 (rw) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) 192.168.0.100:/home on /mnt/nfs/home type nfs (rw,addr=192.168.0.100) 192.168.0.100:/var/nfs on /mnt/nfs/var/nfs type nfs (rw,addr=192.168.0.100) ~# 5 Testing On the client, you can now try to create test files on the NFS shares: client: touch /mnt/nfs/home/test.txt touch /mnt/nfs/var/nfs/test.txt Now go to the server and check if you can see both test files: server: ls -l /home/ ~# ls -l /home/ total 55540 -rw-r--r-- 1 root root 0 Sep 16 17:30 test.txt ~# ls -l /var/nfs ~# ls -l /var/nfs total 0 -rw-r--r-- 1 65534 65534 0 Sep 16 17:30 test.txt ~# (Please note the different ownerships of the test files: the /home NFS share gets accessed as root, therefore /home/test.txt is owned by root; the /var/nfs share gets accessed as nobody/65534, therefore /var/nfs/test.txtis owned by 65534.) 6 Mounting NFS Shares At Boot Time Instead of mounting the NFS shares manually on the client, you could modify /etc/fstab so that the NFS shares get mounted automatically when the client boots. client: Open /etc/fstab and append the following lines: vi /etc/fstab Instead of rw,sync,hard,intr you can use different mount options. To learn more about available options, take a look at man nfs To test if your modified /etc/fstab is working, reboot the client: reboot After the reboot, you should find the two NFS shares in the outputs of df -h ~# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 28G 2.2G 25G 8% / /dev/sda1 99M 13M 82M 14% /boot tmpfs 250M 0 250M 0% /dev/shm 192.168.0.100:/home 28G 2.6G 25G 10% /mnt/nfs/home 192.168.0.100:/var/nfs 28G 2.6G 25G 10% /mnt/nfs/var/nfs ~# and mount ~# mount /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/sda1 on /boot type ext3 (rw) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) 192.168.0.100:/home on /mnt/nfs/home type nfs (rw,sync,hard,intr,addr=192.168.0.100) 192.168.0.100:/var/nfs on /mnt/nfs/var/nfs type nfs (rw,sync,hard,intr,addr=192.168.0.100) ~# 7 Links *Linux NFS: http://nfs.sourceforge.net/ *CentOS: http://www.centos.org/